package cn.iocoder.yudao.module.base.dal.mysql.productwarehouse;

import java.util.*;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.base.dal.dataobject.productwarehouse.ProductWarehouseDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.base.controller.admin.productwarehouse.vo.*;

/**
 * 产品仓储信息 Mapper
 *
 * @author LJX
 */
@Mapper
public interface ProductWarehouseMapper extends BaseMapperX<ProductWarehouseDO> {

    default PageResult<ProductWarehouseDO> selectPage(ProductWarehousePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ProductWarehouseDO>()
                .eqIfPresent(ProductWarehouseDO::getProductId, reqVO.getProductId())
                .eqIfPresent(ProductWarehouseDO::getInWarehouse, reqVO.getInWarehouse())
                .eqIfPresent(ProductWarehouseDO::getOutWarehouse, reqVO.getOutWarehouse())
                .eqIfPresent(ProductWarehouseDO::getStandard, reqVO.getStandard())
                .eqIfPresent(ProductWarehouseDO::getSafe, reqVO.getSafe())
                .eqIfPresent(ProductWarehouseDO::getFill, reqVO.getFill())
                .eqIfPresent(ProductWarehouseDO::getStatus, reqVO.getStatus())
                .eqIfPresent(ProductWarehouseDO::getRemark, reqVO.getRemark())
                .betweenIfPresent(ProductWarehouseDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(ProductWarehouseDO::getId));
    }

    default ProductWarehouseDO selectByProductId(Long productId) {
        return selectOne(ProductWarehouseDO::getProductId, productId);
    }

    default ProductWarehouseDO selectByInWarehouse(Long id) {
        return selectOne(new LambdaQueryWrapperX<ProductWarehouseDO>()
                .eqIfPresent(ProductWarehouseDO::getInWarehouse, id)
                .last("limit 1"));
    }

    default ProductWarehouseDO selectByOutWarehouse(Long id) {
        return selectOne(new LambdaQueryWrapperX<ProductWarehouseDO>()
                .eqIfPresent(ProductWarehouseDO::getOutWarehouse, id)
                .last("limit 1"));
    }

    default ProductWarehouseDO selectByInPosition(Long id) {
        return selectOne(new LambdaQueryWrapperX<ProductWarehouseDO>()
                .eqIfPresent(ProductWarehouseDO::getInPosition, id)
                .last("limit 1"));
    }

    default ProductWarehouseDO selectByOutPosition(Long id) {
        return selectOne(new LambdaQueryWrapperX<ProductWarehouseDO>()
                .eqIfPresent(ProductWarehouseDO::getOutPosition, id)
                .last("limit 1"));
    }
}